

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
    <style>
    /* base */
    html,
    body,
    .container {
      width: 100%;
      height: 100%;
    }

    a,
    a:link,
    a:visited {
      text-decoration: none;
      color: inherit;
    }

    ul {
      list-style: none;
    }

    *,
    ::before,
    ::after {
      box-sizing: border-box;
      margin: 0;
      padding: 0;
    }

    *:focus {
      outline: 0;
    }

    .container {
      display: flex;
      padding-top: 20px;
    }

    /* Nav */
    .container .doc-nav {
      position: fixed;
      height: 100%;
      margin: 0 30px 0 40px;
      width: 280px;
    }

    .doc-nav .nav-header {
      display: flex;
      align-items: center;
      box-sizing: border-box;
      background-color: rgb(240, 241, 242);
      height: 40px;
      padding: 16px;
      font-size: 18px;
      font-weight: 500;
      color: rgb(62, 64, 66);
      cursor: pointer;
    }

    .doc-nav .nav-content {
      height: calc(100% - 40px);
      overflow-y: auto;
      color: rgb(32, 34, 36);
    }

    .doc-nav .nav-content .nav-list,
    .doc-nav .nav-content .nav-sub-list {
      line-height: 1.5rem;
    }

    .doc-nav .nav-content .nav-label {
      display: inline-block;
      position: relative;
      padding: 2px 0 2px 20px;
      margin-bottom: 4px;
    }

    .doc-nav .nav-content .nav-sub-label {
      position: relative;
      padding: 2px 0 2px 40px;
      font-size: 14px;
    }

    .doc-nav .nav-content .nav-sub-label:hover {
      text-decoration: underline;
    }

    .doc-nav .nav-content .nav-list .nav-label.group::before {
      border-bottom: 0.25rem solid transparent;
      border-left: 0.25rem solid #6e7072;
      border-right: 0;
      border-top: 0.25rem solid transparent;
      content: '';
      display: block;
      height: 0;
      left: 0.5rem;
      position: absolute;
      top: 0.625rem;
      transition: transform 0.1s linear;
      width: 0;
    }

    .doc-nav .nav-content .nav-list .nav-label.group.active::before {
      transform: rotate(90deg);
    }

    /* doc content */
    .container .doc-content {
      position: fixed;
      height: 100%;
      width: calc(100% - 80px - 40px - 30px - 240px);
      right: 0%;
      overflow-y: auto;
    }

    .doc-title {
      border-bottom: 1px solid #dcdee0;
      font-size: 22px;
      margin: 8px 0 0;
      padding-bottom: 16px;
    }

    .doc-content h3 {
      font-size: 24px;
      font-weight: 600;
      margin: 24px 0;
    }

    .doc-content h4 {
      font-size: 22px;
      font-weight: 500;
      margin: 30px 0 8px;
    }

    .doc-content h4 span {
      color: #007d9c;
    }

    .doc-content .doc-declare {
      background-color: #fafafa;
      border-radius: 5px;
      border: 1px solid #ccc;
      font-size: 14px;
      overflow-x: auto;
      padding: 10px;
      tab-size: 4;
      line-height: 20px;
    }

    .doc-content .doc-comment {
      font-size: 16px;
      margin: 16px 0;
      line-height: 24px;
      word-break: break-word;
    }
  </style>

</head>
<body>
  <div class="container">
    <div class="doc-nav">
      <a href="#Documentation" class="nav-header">Documentation</a>
      <nav class="nav-content">
        <ul class="nav-list">
          <li>
            <a href="#includes" class="nav-label">Includes</a>
             
            <ul class="nav-sub-list">

              <li>
                <a href="#tuya_cloud_types.h" class="nav-sub-label">tuya_cloud_types.h</a>
              </li>
      
            </ul>
            
          </li>
          <li>
            <a href="#macros" class="nav-label">Macros</a>
             
            <ul class="nav-sub-list">

              <li>
                <a href="#_UNI_LOG_H" class="nav-sub-label">_UNI_LOG_H</a>
              </li>
      

              <li>
                <a href="#TY_LOG_LEVEL_ERR" class="nav-sub-label">TY_LOG_LEVEL_ERR</a>
              </li>
      

              <li>
                <a href="#TY_LOG_LEVEL_WARN" class="nav-sub-label">TY_LOG_LEVEL_WARN</a>
              </li>
      

              <li>
                <a href="#TY_LOG_LEVEL_NOTICE" class="nav-sub-label">TY_LOG_LEVEL_NOTICE</a>
              </li>
      

              <li>
                <a href="#TY_LOG_LEVEL_INFO" class="nav-sub-label">TY_LOG_LEVEL_INFO</a>
              </li>
      

              <li>
                <a href="#TY_LOG_LEVEL_DEBUG" class="nav-sub-label">TY_LOG_LEVEL_DEBUG</a>
              </li>
      

              <li>
                <a href="#TY_LOG_LEVEL_TRACE" class="nav-sub-label">TY_LOG_LEVEL_TRACE</a>
              </li>
      

              <li>
                <a href="#TY_DEAULT_LOG_LEVEL" class="nav-sub-label">TY_DEAULT_LOG_LEVEL</a>
              </li>
      

              <li>
                <a href="#TY_DEAULT_LOG_LEVEL" class="nav-sub-label">TY_DEAULT_LOG_LEVEL</a>
              </li>
      

              <li>
                <a href="#DEF_LOG_BUF_LEN" class="nav-sub-label">DEF_LOG_BUF_LEN</a>
              </li>
      

              <li>
                <a href="#LOG_LEVEL_MIN" class="nav-sub-label">LOG_LEVEL_MIN</a>
              </li>
      

              <li>
                <a href="#LOG_LEVEL_MAX" class="nav-sub-label">LOG_LEVEL_MAX</a>
              </li>
      

              <li>
                <a href="#_THIS_FILE_NAME_" class="nav-sub-label">_THIS_FILE_NAME_</a>
              </li>
      

              <li>
                <a href="#SAK_PRINT_LOG(module,level,fmt, ...)" class="nav-sub-label">SAK_PRINT_LOG(module,level,fmt, ...)</a>
              </li>
      

              <li>
                <a href="#TUYA_REDUCE_BIN_LEVEL1" class="nav-sub-label">TUYA_REDUCE_BIN_LEVEL1</a>
              </li>
      

              <li>
                <a href="#TUYA_REDUCE_BIN_LEVEL2" class="nav-sub-label">TUYA_REDUCE_BIN_LEVEL2</a>
              </li>
      

              <li>
                <a href="#TUYA_REDUCE_BIN_LEVEL3" class="nav-sub-label">TUYA_REDUCE_BIN_LEVEL3</a>
              </li>
      

              <li>
                <a href="#SAK_PRINT_ERR_LOG(fmt, ...)" class="nav-sub-label">SAK_PRINT_ERR_LOG(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#SAK_PRINT_WARN_LOG(fmt, ...)" class="nav-sub-label">SAK_PRINT_WARN_LOG(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#SAK_PRINT_INFO_LOG(fmt, ...)" class="nav-sub-label">SAK_PRINT_INFO_LOG(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#SAK_PRINT_NOTICE_LOG(fmt, ...)" class="nav-sub-label">SAK_PRINT_NOTICE_LOG(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#SAK_PRINT_DEBUG_LOG(fmt, ...)" class="nav-sub-label">SAK_PRINT_DEBUG_LOG(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#SAK_PRINT_TRACE_LOG(fmt, ...)" class="nav-sub-label">SAK_PRINT_TRACE_LOG(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#SAK_PRINT_ERR_LOG(fmt, ...)" class="nav-sub-label">SAK_PRINT_ERR_LOG(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#SAK_PRINT_WARN_LOG(fmt, ...)" class="nav-sub-label">SAK_PRINT_WARN_LOG(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#SAK_PRINT_INFO_LOG(fmt, ...)" class="nav-sub-label">SAK_PRINT_INFO_LOG(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#SAK_PRINT_NOTICE_LOG(fmt, ...)" class="nav-sub-label">SAK_PRINT_NOTICE_LOG(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#SAK_PRINT_DEBUG_LOG(fmt, ...)" class="nav-sub-label">SAK_PRINT_DEBUG_LOG(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#SAK_PRINT_TRACE_LOG(fmt, ...)" class="nav-sub-label">SAK_PRINT_TRACE_LOG(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#SAK_PRINT_ERR_LOG(fmt, ...)" class="nav-sub-label">SAK_PRINT_ERR_LOG(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#SAK_PRINT_WARN_LOG(fmt, ...)" class="nav-sub-label">SAK_PRINT_WARN_LOG(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#SAK_PRINT_INFO_LOG(fmt, ...)" class="nav-sub-label">SAK_PRINT_INFO_LOG(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#SAK_PRINT_NOTICE_LOG(fmt, ...)" class="nav-sub-label">SAK_PRINT_NOTICE_LOG(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#SAK_PRINT_DEBUG_LOG(fmt, ...)" class="nav-sub-label">SAK_PRINT_DEBUG_LOG(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#SAK_PRINT_TRACE_LOG(fmt, ...)" class="nav-sub-label">SAK_PRINT_TRACE_LOG(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#PR_TRACE(fmt, ...)" class="nav-sub-label">PR_TRACE(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#PR_TRACE_ENTER()" class="nav-sub-label">PR_TRACE_ENTER()</a>
              </li>
      

              <li>
                <a href="#PR_TRACE_LEAVE" class="nav-sub-label">PR_TRACE_LEAVE</a>
              </li>
      

              <li>
                <a href="#MPR_TRACE(module,fmt, ...)" class="nav-sub-label">MPR_TRACE(module,fmt, ...)</a>
              </li>
      

              <li>
                <a href="#PR_DEBUG(fmt, ...)" class="nav-sub-label">PR_DEBUG(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#MPR_DEBUG(module,fmt, ...)" class="nav-sub-label">MPR_DEBUG(module,fmt, ...)</a>
              </li>
      

              <li>
                <a href="#PR_TRACE(fmt, ...)" class="nav-sub-label">PR_TRACE(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#PR_TRACE_ENTER()" class="nav-sub-label">PR_TRACE_ENTER()</a>
              </li>
      

              <li>
                <a href="#PR_TRACE_LEAVE()" class="nav-sub-label">PR_TRACE_LEAVE()</a>
              </li>
      

              <li>
                <a href="#MPR_TRACE(module,fmt, ...)" class="nav-sub-label">MPR_TRACE(module,fmt, ...)</a>
              </li>
      

              <li>
                <a href="#PR_DEBUG(fmt, ...)" class="nav-sub-label">PR_DEBUG(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#MPR_DEBUG(module,fmt, ...)" class="nav-sub-label">MPR_DEBUG(module,fmt, ...)</a>
              </li>
      

              <li>
                <a href="#PR_ERR(fmt, ...)" class="nav-sub-label">PR_ERR(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#PR_WARN(fmt, ...)" class="nav-sub-label">PR_WARN(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#PR_NOTICE(fmt, ...)" class="nav-sub-label">PR_NOTICE(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#PR_INFO(fmt, ...)" class="nav-sub-label">PR_INFO(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#SET_PR_DEBUG_LEVEL(level)" class="nav-sub-label">SET_PR_DEBUG_LEVEL(level)</a>
              </li>
      

              <li>
                <a href="#MPR_ERR(module,fmt, ...)" class="nav-sub-label">MPR_ERR(module,fmt, ...)</a>
              </li>
      

              <li>
                <a href="#MPR_WARN(module,fmt, ...)" class="nav-sub-label">MPR_WARN(module,fmt, ...)</a>
              </li>
      

              <li>
                <a href="#MPR_NOTICE(module,fmt, ...)" class="nav-sub-label">MPR_NOTICE(module,fmt, ...)</a>
              </li>
      

              <li>
                <a href="#MPR_INFO(module,fmt, ...)" class="nav-sub-label">MPR_INFO(module,fmt, ...)</a>
              </li>
      

              <li>
                <a href="#PR_DEBUG_RAW" class="nav-sub-label">PR_DEBUG_RAW</a>
              </li>
      

              <li>
                <a href="#PR_DEBUG_RAW(fmt, ...)" class="nav-sub-label">PR_DEBUG_RAW(fmt, ...)</a>
              </li>
      

              <li>
                <a href="#PR_DEBUG_RAW" class="nav-sub-label">PR_DEBUG_RAW</a>
              </li>
      
            </ul>
            
          </li>
          <li>
            <a href="#functions" class="nav-label">Functions</a>
             
            <ul class="nav-sub-list">

              <li>
                <a href="#PrintLog" class="nav-sub-label">PrintLog</a>
              </li>
      

              <li>
                <a href="#PrintErrLog" class="nav-sub-label">PrintErrLog</a>
              </li>
      

              <li>
                <a href="#PrintWarnLog" class="nav-sub-label">PrintWarnLog</a>
              </li>
      

              <li>
                <a href="#PrintInfoLog" class="nav-sub-label">PrintInfoLog</a>
              </li>
      

              <li>
                <a href="#PrintNoticeLog" class="nav-sub-label">PrintNoticeLog</a>
              </li>
      

              <li>
                <a href="#PrintDebugLog" class="nav-sub-label">PrintDebugLog</a>
              </li>
      

              <li>
                <a href="#PrintTraceLog" class="nav-sub-label">PrintTraceLog</a>
              </li>
      

              <li>
                <a href="#PrintErrLog" class="nav-sub-label">PrintErrLog</a>
              </li>
      

              <li>
                <a href="#PrintWarnLog" class="nav-sub-label">PrintWarnLog</a>
              </li>
      

              <li>
                <a href="#PrintInfoLog" class="nav-sub-label">PrintInfoLog</a>
              </li>
      

              <li>
                <a href="#PrintNoticeLog" class="nav-sub-label">PrintNoticeLog</a>
              </li>
      

              <li>
                <a href="#PrintDebugLog" class="nav-sub-label">PrintDebugLog</a>
              </li>
      

              <li>
                <a href="#PrintTraceLog" class="nav-sub-label">PrintTraceLog</a>
              </li>
      

              <li>
                <a href="#PrintErrLog" class="nav-sub-label">PrintErrLog</a>
              </li>
      

              <li>
                <a href="#PrintWarnLog" class="nav-sub-label">PrintWarnLog</a>
              </li>
      

              <li>
                <a href="#PrintInfoLog" class="nav-sub-label">PrintInfoLog</a>
              </li>
      

              <li>
                <a href="#PrintNoticeLog" class="nav-sub-label">PrintNoticeLog</a>
              </li>
      

              <li>
                <a href="#PrintDebugLog" class="nav-sub-label">PrintDebugLog</a>
              </li>
      

              <li>
                <a href="#PrintTraceLog" class="nav-sub-label">PrintTraceLog</a>
              </li>
      

              <li>
                <a href="#CreateLogManageAndInit" class="nav-sub-label">CreateLogManageAndInit</a>
              </li>
      

              <li>
                <a href="#AddOutputTerm" class="nav-sub-label">AddOutputTerm</a>
              </li>
      

              <li>
                <a href="#DelOutputTerm" class="nav-sub-label">DelOutputTerm</a>
              </li>
      

              <li>
                <a href="#SetLogManageAttr" class="nav-sub-label">SetLogManageAttr</a>
              </li>
      

              <li>
                <a href="#SetLogManagemtime" class="nav-sub-label">SetLogManagemtime</a>
              </li>
      

              <li>
                <a href="#GetLogManageAttr" class="nav-sub-label">GetLogManageAttr</a>
              </li>
      

              <li>
                <a href="#AddModuleLevel" class="nav-sub-label">AddModuleLevel</a>
              </li>
      

              <li>
                <a href="#SetModuleLevel" class="nav-sub-label">SetModuleLevel</a>
              </li>
      

              <li>
                <a href="#GetModuleLevel" class="nav-sub-label">GetModuleLevel</a>
              </li>
      

              <li>
                <a href="#DeleteModuleLevel" class="nav-sub-label">DeleteModuleLevel</a>
              </li>
      

              <li>
                <a href="#PrintLogRaw" class="nav-sub-label">PrintLogRaw</a>
              </li>
      

              <li>
                <a href="#ReleaseLogManage" class="nav-sub-label">ReleaseLogManage</a>
              </li>
      

              <li>
                <a href="#tuya_debug_hex_dump" class="nav-sub-label">tuya_debug_hex_dump</a>
              </li>
      
            </ul>
            
          </li>
          <li>
            <a href="#vars" class="nav-label">Vars</a>
            
            <ul class="nav-sub-list">
            
            </ul>
            
          </li>
          <li>
            <a href="#consts" class="nav-label">Consts</a>
            
            <ul class="nav-sub-list">
            
            </ul>
            
          </li>
          <li>
            <a href="#types" class="nav-label">Types</a>
            
            <ul class="nav-sub-list">
            
            </ul>
            
          </li>
          <li>
            <a href="#typedefs" class="nav-label">Typedefs</a>
             
            <ul class="nav-sub-list">

              <li>
                <a href="#LOG_LEVEL" class="nav-sub-label">LOG_LEVEL</a>
              </li>
      

              <li>
                <a href="#LOG_OUTPUT" class="nav-sub-label">LOG_OUTPUT</a>
              </li>
      
            </ul>
            
          </li>
        </ul>
      </nav>
    </div>
    <div class="doc-content">
      <h2 id="Documentation" class="doc-title">Documentation</h2>
      <h3 id="includes">Includes</h3>
      

      <h4 id="tuya_cloud_types.h"><span>tuya_cloud_types.h</span></h4>
      <pre class="doc-declare"><code>#include "tuya_cloud_types.h"
</code></pre>
      <pre class="doc-comment">#include "tuya_cloud_types.h"
</pre>
      <h3 id="macros">Macros</h3>
      

      <h4 id="_UNI_LOG_H">Marco <span>_UNI_LOG_H</span></h4>
      <pre class="doc-declare"><code>#define _UNI_LOG_H
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="TY_LOG_LEVEL_ERR">Marco <span>TY_LOG_LEVEL_ERR</span></h4>
      <pre class="doc-declare"><code>#define TY_LOG_LEVEL_ERR      0 // error information
</code></pre>
      <pre class="doc-comment">/**
 * @brief Definition of log level
 */</pre>

      <h4 id="TY_LOG_LEVEL_WARN">Marco <span>TY_LOG_LEVEL_WARN</span></h4>
      <pre class="doc-declare"><code>#define TY_LOG_LEVEL_WARN     1 // warnning information
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="TY_LOG_LEVEL_NOTICE">Marco <span>TY_LOG_LEVEL_NOTICE</span></h4>
      <pre class="doc-declare"><code>#define TY_LOG_LEVEL_NOTICE   2 // notice information
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="TY_LOG_LEVEL_INFO">Marco <span>TY_LOG_LEVEL_INFO</span></h4>
      <pre class="doc-declare"><code>#define TY_LOG_LEVEL_INFO     3 // information
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="TY_LOG_LEVEL_DEBUG">Marco <span>TY_LOG_LEVEL_DEBUG</span></h4>
      <pre class="doc-declare"><code>#define TY_LOG_LEVEL_DEBUG    4 // debug information , should delete in release version
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="TY_LOG_LEVEL_TRACE">Marco <span>TY_LOG_LEVEL_TRACE</span></h4>
      <pre class="doc-declare"><code>#define TY_LOG_LEVEL_TRACE    5 // trace information , should delete in release version
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="TY_DEAULT_LOG_LEVEL">Marco <span>TY_DEAULT_LOG_LEVEL</span></h4>
      <pre class="doc-declare"><code>#define TY_DEAULT_LOG_LEVEL   TY_LOG_LEVEL_DEBUG
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="TY_DEAULT_LOG_LEVEL">Marco <span>TY_DEAULT_LOG_LEVEL</span></h4>
      <pre class="doc-declare"><code>#define TY_DEAULT_LOG_LEVEL   TY_LOG_LEVEL_INFO
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="DEF_LOG_BUF_LEN">Marco <span>DEF_LOG_BUF_LEN</span></h4>
      <pre class="doc-declare"><code>#define DEF_LOG_BUF_LEN	1024
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="LOG_LEVEL_MIN">Marco <span>LOG_LEVEL_MIN</span></h4>
      <pre class="doc-declare"><code>#define LOG_LEVEL_MIN	0
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="LOG_LEVEL_MAX">Marco <span>LOG_LEVEL_MAX</span></h4>
      <pre class="doc-declare"><code>#define LOG_LEVEL_MAX	5
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="_THIS_FILE_NAME_">Marco <span>_THIS_FILE_NAME_</span></h4>
      <pre class="doc-declare"><code>#define _THIS_FILE_NAME_ __FILE__
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="SAK_PRINT_LOG(module,level,fmt, ...)">Marco <span>SAK_PRINT_LOG(module,level,fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define SAK_PRINT_LOG(module,level,fmt, ...) \
do \
{ \
   PrintLog(module,level, \
            _THIS_FILE_NAME_, __LINE__,\
            fmt,##__VA_ARGS__); \
}while(0)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="TUYA_REDUCE_BIN_LEVEL1">Marco <span>TUYA_REDUCE_BIN_LEVEL1</span></h4>
      <pre class="doc-declare"><code>#define TUYA_REDUCE_BIN_LEVEL1 1
</code></pre>
      <pre class="doc-comment">// this level, log dont has line_number information </pre>

      <h4 id="TUYA_REDUCE_BIN_LEVEL2">Marco <span>TUYA_REDUCE_BIN_LEVEL2</span></h4>
      <pre class="doc-declare"><code>#define TUYA_REDUCE_BIN_LEVEL2 2
</code></pre>
      <pre class="doc-comment">// this level, log dont has file_name and line_number information</pre>

      <h4 id="TUYA_REDUCE_BIN_LEVEL3">Marco <span>TUYA_REDUCE_BIN_LEVEL3</span></h4>
      <pre class="doc-declare"><code>#define TUYA_REDUCE_BIN_LEVEL3 3
</code></pre>
      <pre class="doc-comment">// this level, log dont has file_name , line_number and no tare and debug information</pre>

      <h4 id="SAK_PRINT_ERR_LOG(fmt, ...)">Marco <span>SAK_PRINT_ERR_LOG(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define SAK_PRINT_ERR_LOG(fmt, ...) \
do \
{ \
   PrintErrLog(fmt,##__VA_ARGS__); \
}while(0)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="SAK_PRINT_WARN_LOG(fmt, ...)">Marco <span>SAK_PRINT_WARN_LOG(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define SAK_PRINT_WARN_LOG(fmt, ...) \
do \
{ \
   PrintWarnLog(fmt,##__VA_ARGS__); \
}while(0)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="SAK_PRINT_INFO_LOG(fmt, ...)">Marco <span>SAK_PRINT_INFO_LOG(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define SAK_PRINT_INFO_LOG(fmt, ...) \
do \
{ \
   PrintInfoLog(fmt,##__VA_ARGS__); \
}while(0)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="SAK_PRINT_NOTICE_LOG(fmt, ...)">Marco <span>SAK_PRINT_NOTICE_LOG(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define SAK_PRINT_NOTICE_LOG(fmt, ...) \
do \
{ \
   PrintNoticeLog(fmt,##__VA_ARGS__); \
}while(0)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="SAK_PRINT_DEBUG_LOG(fmt, ...)">Marco <span>SAK_PRINT_DEBUG_LOG(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define SAK_PRINT_DEBUG_LOG(fmt, ...) \
do \
{ \
   PrintDebugLog(fmt,##__VA_ARGS__); \
}while(0)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="SAK_PRINT_TRACE_LOG(fmt, ...)">Marco <span>SAK_PRINT_TRACE_LOG(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define SAK_PRINT_TRACE_LOG(fmt, ...) \
do \
{ \
   PrintTraceLog(fmt,##__VA_ARGS__); \
}while(0)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="SAK_PRINT_ERR_LOG(fmt, ...)">Marco <span>SAK_PRINT_ERR_LOG(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define SAK_PRINT_ERR_LOG(fmt, ...) \
do \
{ \
   PrintErrLog(_THIS_FILE_NAME_, fmt,##__VA_ARGS__); \
}while(0)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="SAK_PRINT_WARN_LOG(fmt, ...)">Marco <span>SAK_PRINT_WARN_LOG(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define SAK_PRINT_WARN_LOG(fmt, ...) \
do \
{ \
   PrintWarnLog(_THIS_FILE_NAME_, fmt,##__VA_ARGS__); \
}while(0)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="SAK_PRINT_INFO_LOG(fmt, ...)">Marco <span>SAK_PRINT_INFO_LOG(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define SAK_PRINT_INFO_LOG(fmt, ...) \
do \
{ \
   PrintInfoLog(_THIS_FILE_NAME_, fmt,##__VA_ARGS__); \
}while(0)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="SAK_PRINT_NOTICE_LOG(fmt, ...)">Marco <span>SAK_PRINT_NOTICE_LOG(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define SAK_PRINT_NOTICE_LOG(fmt, ...) \
do \
{ \
   PrintNoticeLog(_THIS_FILE_NAME_, fmt,##__VA_ARGS__); \
}while(0)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="SAK_PRINT_DEBUG_LOG(fmt, ...)">Marco <span>SAK_PRINT_DEBUG_LOG(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define SAK_PRINT_DEBUG_LOG(fmt, ...) \
do \
{ \
   PrintDebugLog(_THIS_FILE_NAME_, fmt,##__VA_ARGS__); \
}while(0)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="SAK_PRINT_TRACE_LOG(fmt, ...)">Marco <span>SAK_PRINT_TRACE_LOG(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define SAK_PRINT_TRACE_LOG(fmt, ...) \
do \
{ \
   PrintTraceLog(_THIS_FILE_NAME_, fmt,##__VA_ARGS__); \
}while(0)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="SAK_PRINT_ERR_LOG(fmt, ...)">Marco <span>SAK_PRINT_ERR_LOG(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define SAK_PRINT_ERR_LOG(fmt, ...) \
do \
{ \
   PrintErrLog(_THIS_FILE_NAME_, __LINE__, fmt,##__VA_ARGS__); \
}while(0)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="SAK_PRINT_WARN_LOG(fmt, ...)">Marco <span>SAK_PRINT_WARN_LOG(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define SAK_PRINT_WARN_LOG(fmt, ...) \
do \
{ \
   PrintWarnLog(_THIS_FILE_NAME_, __LINE__,fmt,##__VA_ARGS__); \
}while(0)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="SAK_PRINT_INFO_LOG(fmt, ...)">Marco <span>SAK_PRINT_INFO_LOG(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define SAK_PRINT_INFO_LOG(fmt, ...) \
do \
{ \
   PrintInfoLog(_THIS_FILE_NAME_, __LINE__,fmt,##__VA_ARGS__); \
}while(0)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="SAK_PRINT_NOTICE_LOG(fmt, ...)">Marco <span>SAK_PRINT_NOTICE_LOG(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define SAK_PRINT_NOTICE_LOG(fmt, ...) \
do \
{ \
   PrintNoticeLog(_THIS_FILE_NAME_, __LINE__,fmt,##__VA_ARGS__); \
}while(0)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="SAK_PRINT_DEBUG_LOG(fmt, ...)">Marco <span>SAK_PRINT_DEBUG_LOG(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define SAK_PRINT_DEBUG_LOG(fmt, ...) \
do \
{ \
   PrintDebugLog(_THIS_FILE_NAME_, __LINE__,fmt,##__VA_ARGS__); \
}while(0)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="SAK_PRINT_TRACE_LOG(fmt, ...)">Marco <span>SAK_PRINT_TRACE_LOG(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define SAK_PRINT_TRACE_LOG(fmt, ...) \
do \
{ \
   PrintTraceLog(_THIS_FILE_NAME_, __LINE__,fmt,##__VA_ARGS__); \
}while(0)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PR_TRACE(fmt, ...)">Marco <span>PR_TRACE(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define PR_TRACE(fmt, ...) 
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PR_TRACE_ENTER()">Marco <span>PR_TRACE_ENTER()</span></h4>
      <pre class="doc-declare"><code>#define PR_TRACE_ENTER() 
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PR_TRACE_LEAVE">Marco <span>PR_TRACE_LEAVE</span></h4>
      <pre class="doc-declare"><code>#define PR_TRACE_LEAVE()
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="MPR_TRACE(module,fmt, ...)">Marco <span>MPR_TRACE(module,fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define MPR_TRACE(module,fmt, ...) 
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PR_DEBUG(fmt, ...)">Marco <span>PR_DEBUG(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define PR_DEBUG(fmt, ...) 
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="MPR_DEBUG(module,fmt, ...)">Marco <span>MPR_DEBUG(module,fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define MPR_DEBUG(module,fmt, ...) 
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PR_TRACE(fmt, ...)">Marco <span>PR_TRACE(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define PR_TRACE(fmt, ...)  SAK_PRINT_TRACE_LOG(fmt, ##__VA_ARGS__)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PR_TRACE_ENTER()">Marco <span>PR_TRACE_ENTER()</span></h4>
      <pre class="doc-declare"><code>#define PR_TRACE_ENTER()    PR_TRACE("enter [%s]", (const char*)__func__)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PR_TRACE_LEAVE()">Marco <span>PR_TRACE_LEAVE()</span></h4>
      <pre class="doc-declare"><code>#define PR_TRACE_LEAVE()    PR_TRACE("leave [%s]", (const char*)__func__)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="MPR_TRACE(module,fmt, ...)">Marco <span>MPR_TRACE(module,fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define MPR_TRACE(module,fmt, ...) SAK_PRINT_LOG(module,TY_LOG_LEVEL_TRACE, fmt, ##__VA_ARGS__)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PR_DEBUG(fmt, ...)">Marco <span>PR_DEBUG(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define PR_DEBUG(fmt, ...)        SAK_PRINT_DEBUG_LOG(fmt, ##__VA_ARGS__)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="MPR_DEBUG(module,fmt, ...)">Marco <span>MPR_DEBUG(module,fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define MPR_DEBUG(module,fmt, ...) SAK_PRINT_LOG(module,TY_LOG_LEVEL_DEBUG, fmt, ##__VA_ARGS__)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PR_ERR(fmt, ...)">Marco <span>PR_ERR(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define PR_ERR(fmt, ...) SAK_PRINT_ERR_LOG(fmt, ##__VA_ARGS__)
</code></pre>
      <pre class="doc-comment">// log interface for user</pre>

      <h4 id="PR_WARN(fmt, ...)">Marco <span>PR_WARN(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define PR_WARN(fmt, ...) SAK_PRINT_WARN_LOG(fmt, ##__VA_ARGS__)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PR_NOTICE(fmt, ...)">Marco <span>PR_NOTICE(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define PR_NOTICE(fmt, ...) SAK_PRINT_NOTICE_LOG(fmt, ##__VA_ARGS__)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PR_INFO(fmt, ...)">Marco <span>PR_INFO(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define PR_INFO(fmt, ...) SAK_PRINT_INFO_LOG(fmt, ##__VA_ARGS__)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="SET_PR_DEBUG_LEVEL(level)">Marco <span>SET_PR_DEBUG_LEVEL(level)</span></h4>
      <pre class="doc-declare"><code>#define SET_PR_DEBUG_LEVEL(level) SetLogManageAttr(level)
</code></pre>
      <pre class="doc-comment">// set log level</pre>

      <h4 id="MPR_ERR(module,fmt, ...)">Marco <span>MPR_ERR(module,fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define MPR_ERR(module,fmt, ...) SAK_PRINT_LOG(module,TY_LOG_LEVEL_ERR, fmt, ##__VA_ARGS__)
</code></pre>
      <pre class="doc-comment">// log output interface with module name</pre>

      <h4 id="MPR_WARN(module,fmt, ...)">Marco <span>MPR_WARN(module,fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define MPR_WARN(module,fmt, ...) SAK_PRINT_LOG(module,TY_LOG_LEVEL_WARN, fmt, ##__VA_ARGS__)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="MPR_NOTICE(module,fmt, ...)">Marco <span>MPR_NOTICE(module,fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define MPR_NOTICE(module,fmt, ...) SAK_PRINT_LOG(module,TY_LOG_LEVEL_NOTICE, fmt, ##__VA_ARGS__)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="MPR_INFO(module,fmt, ...)">Marco <span>MPR_INFO(module,fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define MPR_INFO(module,fmt, ...) SAK_PRINT_LOG(module,TY_LOG_LEVEL_INFO, fmt, ##__VA_ARGS__)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PR_DEBUG_RAW">Marco <span>PR_DEBUG_RAW</span></h4>
      <pre class="doc-declare"><code>#define PR_DEBUG_RAW(fmt, ...)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PR_DEBUG_RAW(fmt, ...)">Marco <span>PR_DEBUG_RAW(fmt, ...)</span></h4>
      <pre class="doc-declare"><code>#define PR_DEBUG_RAW(fmt, ...) PrintLogRaw(fmt, ##__VA_ARGS__)
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PR_DEBUG_RAW">Marco <span>PR_DEBUG_RAW</span></h4>
      <pre class="doc-declare"><code>#define PR_DEBUG_RAW(fmt, ...)
</code></pre>
      <pre class="doc-comment"></pre>
      <h3 id="functions">Functions</h3>
      

      <h4 id="PrintLog">Func <span>PrintLog</span></h4>
      <pre class="doc-declare"><code>int PrintLog(const char* pModuleName,
                const LOG_LEVEL logLevel,
                const char* pFile, const int line,
                const char* pFmt,...);</code></pre>
      <pre class="doc-comment">/**
 * @brief output log
 *
 * @param[in] pModuleName, module name
 * @param[in] logLevel, this log level
 * @param[in] pFile, file name of this log
 * @param[in] line, line number in the file of this log
 * @param[in] pFmt, format string
 * @param[in] ..., parameters
 *
 * @note This API is used for output log.
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */</pre>

      <h4 id="PrintErrLog">Func <span>PrintErrLog</span></h4>
      <pre class="doc-declare"><code>int PrintErrLog(const char* pFmt,...);</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PrintWarnLog">Func <span>PrintWarnLog</span></h4>
      <pre class="doc-declare"><code>int PrintWarnLog(const char* pFmt,...);</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PrintInfoLog">Func <span>PrintInfoLog</span></h4>
      <pre class="doc-declare"><code>int PrintInfoLog(const char* pFmt,...);</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PrintNoticeLog">Func <span>PrintNoticeLog</span></h4>
      <pre class="doc-declare"><code>int PrintNoticeLog(const char* pFmt,...);</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PrintDebugLog">Func <span>PrintDebugLog</span></h4>
      <pre class="doc-declare"><code>int PrintDebugLog(const char* pFmt,...);</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PrintTraceLog">Func <span>PrintTraceLog</span></h4>
      <pre class="doc-declare"><code>int PrintTraceLog(const char* pFmt,...);</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PrintErrLog">Func <span>PrintErrLog</span></h4>
      <pre class="doc-declare"><code>int PrintErrLog(const char* pFile, const char* pFmt,...);</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PrintWarnLog">Func <span>PrintWarnLog</span></h4>
      <pre class="doc-declare"><code>int PrintWarnLog(const char* pFile, const char* pFmt,...);</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PrintInfoLog">Func <span>PrintInfoLog</span></h4>
      <pre class="doc-declare"><code>int PrintInfoLog(const char* pFile, const char* pFmt,...);</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PrintNoticeLog">Func <span>PrintNoticeLog</span></h4>
      <pre class="doc-declare"><code>int PrintNoticeLog(const char* pFile, const char* pFmt,...);</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PrintDebugLog">Func <span>PrintDebugLog</span></h4>
      <pre class="doc-declare"><code>int PrintDebugLog(const char* pFile, const char* pFmt,...);</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PrintTraceLog">Func <span>PrintTraceLog</span></h4>
      <pre class="doc-declare"><code>int PrintTraceLog(const char* pFile, const char* pFmt,...);</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PrintErrLog">Func <span>PrintErrLog</span></h4>
      <pre class="doc-declare"><code>int PrintErrLog(const char* pFile, const int line, const char* pFmt,...);</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PrintWarnLog">Func <span>PrintWarnLog</span></h4>
      <pre class="doc-declare"><code>int PrintWarnLog(const char* pFile, const int line, const char* pFmt,...);</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PrintInfoLog">Func <span>PrintInfoLog</span></h4>
      <pre class="doc-declare"><code>int PrintInfoLog(const char* pFile, const int line, const char* pFmt,...);</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PrintNoticeLog">Func <span>PrintNoticeLog</span></h4>
      <pre class="doc-declare"><code>int PrintNoticeLog(const char* pFile, const int line, const char* pFmt,...);</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PrintDebugLog">Func <span>PrintDebugLog</span></h4>
      <pre class="doc-declare"><code>int PrintDebugLog(const char* pFile, const int line, const char* pFmt,...);</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="PrintTraceLog">Func <span>PrintTraceLog</span></h4>
      <pre class="doc-declare"><code>int PrintTraceLog(const char* pFile, const int line, const char* pFmt,...);</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="CreateLogManageAndInit">Func <span>CreateLogManageAndInit</span></h4>
      <pre class="doc-declare"><code>OPERATE_RET CreateLogManageAndInit(IN CONST LOG_LEVEL curLogLevel,IN CONST INT_T buf_len,\
                                             IN CONST LOG_OUTPUT output);</code></pre>
      <pre class="doc-comment">/**
 * @brief initialize log management.
 *
 * @param[in] curLogLevel , set log level
 * @param[in] buf_len , set log buffer size
 * @param[in] output , log print function pointer
 *
 * @note This API is used for initializing log management.
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */</pre>

      <h4 id="AddOutputTerm">Func <span>AddOutputTerm</span></h4>
      <pre class="doc-declare"><code>OPERATE_RET AddOutputTerm(IN CONST CHAR_T *name,IN CONST LOG_OUTPUT term);</code></pre>
      <pre class="doc-comment">/**
 * @brief add one output terminal.
 *
 * @param[in] name , terminal name
 * @param[in] term , output function pointer
 *
 * @note This API is used for adding one output terminal.
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */</pre>

      <h4 id="DelOutputTerm">Func <span>DelOutputTerm</span></h4>
      <pre class="doc-declare"><code>VOID DelOutputTerm(IN CONST CHAR_T *name);</code></pre>
      <pre class="doc-comment">/**
 * @brief delete one output terminal.
 *
 * @param[in] name , terminal name
 *
 * @note This API is used for delete one output terminal.
 *
 * @return NONE
 */</pre>

      <h4 id="SetLogManageAttr">Func <span>SetLogManageAttr</span></h4>
      <pre class="doc-declare"><code>OPERATE_RET SetLogManageAttr(IN CONST LOG_LEVEL curLogLevel);</code></pre>
      <pre class="doc-comment">/**
 * @brief set global log level.
 *
 * @param[in] curLogLevel , log level
 *
 * @note This API is used for setting global log level.
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */</pre>

      <h4 id="SetLogManagemtime">Func <span>SetLogManagemtime</span></h4>
      <pre class="doc-declare"><code>OPERATE_RET SetLogManagemtime(BOOL_T if_ms_level);</code></pre>
      <pre class="doc-comment">/**
 * @brief set log time whether show in millisecond.
 *
 * @param[in] if_ms_level, whether log time include millisecond
 *
 * @note This API is used for setting log time whether include milisecond.
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */</pre>

      <h4 id="GetLogManageAttr">Func <span>GetLogManageAttr</span></h4>
      <pre class="doc-declare"><code>OPERATE_RET GetLogManageAttr(OUT LOG_LEVEL *pCurLogLevel);</code></pre>
      <pre class="doc-comment">/**
 * @brief get global log level.
 *
 * @param[in] pCurLogLevel, global log level
 *
 * @note This API is used for getting global log level.
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */</pre>

      <h4 id="AddModuleLevel">Func <span>AddModuleLevel</span></h4>
      <pre class="doc-declare"><code>OPERATE_RET AddModuleLevel(IN CONST PCHAR_T pModuleName,\
                                 IN CONST LOG_LEVEL logLevel);</code></pre>
      <pre class="doc-comment">/**
 * @brief add one module's log level
 *
 * @param[in] pModuleName, module name
 * @param[in] logLevel, this module's log level
 *
 * @note This API is used for adding one module's log level.
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */</pre>

      <h4 id="SetModuleLevel">Func <span>SetModuleLevel</span></h4>
      <pre class="doc-declare"><code>OPERATE_RET SetModuleLevel(IN CONST PCHAR_T pModuleName,\
                                 LOG_LEVEL log_level);</code></pre>
      <pre class="doc-comment">/**
 * @brief add one module's log level
 *
 * @param[in] pModuleName, module name
 * @param[in] logLevel, this module's log level
 *
 * @note This API is used for adding one module's log level.
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */</pre>

      <h4 id="GetModuleLevel">Func <span>GetModuleLevel</span></h4>
      <pre class="doc-declare"><code>OPERATE_RET GetModuleLevel(IN CONST PCHAR_T pModuleName,\
                                 OUT LOG_LEVEL *pLogLevel);</code></pre>
      <pre class="doc-comment">/**
 * @brief get one module's log level
 *
 * @param[in] pModuleName, module name
 * @param[in] logLevel, this module's log level
 *
 * @note This API is used for getting one module's log level.
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */</pre>

      <h4 id="DeleteModuleLevel">Func <span>DeleteModuleLevel</span></h4>
      <pre class="doc-declare"><code>OPERATE_RET DeleteModuleLevel(IN CONST PCHAR_T pModuleName);</code></pre>
      <pre class="doc-comment">/**
 * @brief delete one module's log level
 *
 * @param[in] pModuleName, module name
 *
 * @note This API is used for deleting one module's log level.
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */</pre>

      <h4 id="PrintLogRaw">Func <span>PrintLogRaw</span></h4>
      <pre class="doc-declare"><code>OPERATE_RET PrintLogRaw(IN CONST PCHAR_T pFmt,...);</code></pre>
      <pre class="doc-comment">/**
 * @brief only print user log information
 *
 * @param[in] pFmt, format string
 * @param[in] ..., parameter
 *
 * @note This API is used for print only user log info.
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */</pre>

      <h4 id="ReleaseLogManage">Func <span>ReleaseLogManage</span></h4>
      <pre class="doc-declare"><code>VOID ReleaseLogManage(VOID);</code></pre>
      <pre class="doc-comment">/**
 * @brief destroy log management
 *
 * @param[in] pFmt, format string
 * @param[in] ..., parameter
 *
 * @note This API is used for destroy log management.
 *
 * @return NONE
 */</pre>

      <h4 id="tuya_debug_hex_dump">Func <span>tuya_debug_hex_dump</span></h4>
      <pre class="doc-declare"><code>VOID tuya_debug_hex_dump(CHAR_T *title, UINT8_T width, UINT8_T *buf, UINT16_T size);</code></pre>
      <pre class="doc-comment">/**
 * @brief print a buffer in hex format
 *
 * @param[in] title, buffer title for print
 * @param[in] width, one line width
 * @param[in] buf, buffer address
 * @param[in] size, buffer size
 *
 * @note This API is used for print one buffer.
 *
 * @return NONE
 */</pre>
      <h3 id="vars">Vars</h3>
      
      <h3 id="consts">Consts</h3>
      
      <h3 id="types">Types</h3>
      
      <h3 id="typedefs">Typedefs</h3>
      

      <h4 id="LOG_LEVEL">Typedef <span>LOG_LEVEL</span></h4>
      <pre class="doc-declare"><code>typedef INT_T LOG_LEVEL;
</code></pre>
      <pre class="doc-comment"></pre>

      <h4 id="LOG_OUTPUT">Typedef <span>LOG_OUTPUT</span></h4>
      <pre class="doc-declare"><code>typedef VOID (*LOG_OUTPUT)(IN CONST     CHAR_T *str);
</code></pre>
      <pre class="doc-comment">// prototype of log output function</pre>
    </div>
  </body>
</html>
            